/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: 
 * 软件版权: Frank
 * 系统版本: 1.0.0
 * 开发人员: Frank
 * 开发时间: 2019/12/14 14:59
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.spring.arch.uaa.enums;

import com.google.common.collect.Lists;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.StringJoiner;

/**
 * 系统常量
 * @author Frank
 * @version 1.0.0.1
 * @since 2019/12/14 14:59
 */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class Constant {

    /** 全局默认登陆密码 **/
    public static final String GLOBAL_DEFAULT_PASSWORD = "123456";
    public static final String SUPER_ADMIN_ACCOUNT = "sadmin";
    public static final String ZHONGLIANG_ADMIN_ACCOUNT = "zladmin";

    /** 内置租户编码 **/
    public static final String INTERNAL_TENANT_CODE = "internal";

    /** OAuth2客户端id **/
    public static final String OAUTH_CLIENT_ID_WEB = "web";
    public static final String OAUTH_CLIENT_ID_MOBILE = "mobile";
    public static final String OAUTH_CLIENT_ID_THIRD = "third";

    /** 角色编码前缀 **/
    public static final String ROLE_CODE_PREFIX = "ROLE_";
    /** 超级管理员角色编码 **/
    public static final String SUPER_ADMIN_ROLE_CODE = "ROLE_000001";
    /** 租户管理员角色编码 **/
    public static final String TENANT_ADMIN_ROLE_CODE = "ROLE_000002";
    /** 项目管理员角色编码 **/
    public static final String PROJECT_ADMIN_ROLE_CODE = "ROLE_000003";

    /**
     * // 项目经理 ROLE_000004 projectManagerRole
     * // 保安部负责人 ROLE_000005 publicSecurityManagerRole
     * // 保安部员工 ROLE_000006 publicSecurityEmployeeRole
     * // 保洁部门责任人 ROLE_000007 cleaningManagerRole
     * // 保洁部员工 ROLE_000008 cleaningEmployeeRole
     * // 环境部负责人 ROLE_000009 environmentManagerRole
     * // 环境部员工 ROLE_000010 environmentEmployeeRole
     * // 工程部负责人 ROLE_000011 engineerManagerRole
     * // 值班工程师 ROLE_000012 engineerOnDutyRole
     * // 工程部员工 ROLE_000013 engineerEmployeeRole
     * // 客服部负责人 ROLE_000014 customerManagerRole
     * // 客服部员工 ROLE_000015 customerEmployeeRole
     * // 安全部负责人 ROLE_000016 safetyManagerRole
     * // 安全部员工 ROLE_000017 safetyEmployeeRole
     * // 品质部负责人 ROLE_000018 qualityManagerRole
     * // 品质部员工 ROLE_000019 qualityEmployeeRole
     * // 财务主管 ROLE_000020 changeManagerRole
     * // 财务专员 ROLE_000021 changeEmployeeRole
     * // 人事部负责人 ROLE_000022 personalManagerRole
     * // 人事部员工 ROLE_000023 personalEmployeeRole
     */
    public static final List<String> MANAGER_ROLE_CODES = Lists.newArrayList(
            "ROLE_000004", "ROLE_000005", "ROLE_000007", "ROLE_000009",
            "ROLE_000011","ROLE_000014", "ROLE_000016", "ROLE_000018", "ROLE_000020", "ROLE_000022");


    /** 租户管理员编码前缀 **/
    public static final String TENANT_ADMIN_CODE_PREFIX = "TM_";
    /** 租户管理员编码后缀 **/
    public static final String TENANT_ADMIN_CODE_SUFFIX = "000001";
    /** 项目管理员编码前缀 **/
    public static final String PROJECT_ADMIN_CODE_PREFIX = "PM_";
    /** 项目管理员编码后缀 **/
    public static final String PROJECT_ADMIN_CODE_SUFFIX = "000001";

    /** 系统级别资源权限编码前缀 **/
    public static final String SYSTEM_AUTHORITY_CODE_PREFIX = "SA";
    public static final String TENANT_AUTHORITY_CODE_PREFIX = "TA";
    public static final String PROJECT_AUTHORITY_CODE_PREFIX = "PA";

    /** saas管理中心ID **/
    public static final String SAAS_MANAGER_CENTER_ID = "66b34a34-984c-4697-a302-9514581bd262";


    /** 组织编码前缀 **/
    public static final String TENANT_ROOT_ORGANIZATION_CODE_PREFIX = "TO_";
    /** 根组织编码后缀 **/
    public static final String TENANT_ROOT_ORGANIZATION_CODE_SUFFIX = "000001";
    /** 组织编码前缀 **/
    public static final String PROJECT_ROOT_ORGANIZATION_CODE_PREFIX = "PO_";
    /** 根组织编码后缀 **/
    public static final String PROJECT_ROOT_ORGANIZATION_CODE_SUFFIX = "000001";


    public static String tenantAdminCode(String tenantCode) {
        return new StringJoiner(tenantCode)
                .add(TENANT_ADMIN_CODE_PREFIX)
                .add(TENANT_ADMIN_CODE_SUFFIX)
                .toString();
    }

    public static String projectAdminCode(String projectCode) {
        return new StringJoiner(projectCode)
                .add(PROJECT_ADMIN_CODE_PREFIX)
                .add(PROJECT_ADMIN_CODE_SUFFIX)
                .toString();
    }

    public static String tenantRootOrgCode(String tenantCode) {
        return new StringJoiner(tenantCode)
                .add(TENANT_ROOT_ORGANIZATION_CODE_PREFIX)
                .add(TENANT_ROOT_ORGANIZATION_CODE_SUFFIX)
                .toString();
    }

    public static String projectRootOrgCode(String projectCode) {
        return new StringJoiner(projectCode)
                .add(PROJECT_ROOT_ORGANIZATION_CODE_PREFIX)
                .add(PROJECT_ROOT_ORGANIZATION_CODE_SUFFIX)
                .toString();
    }
}
